#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

const int N=5e5+10;

typedef long long LL;

int n,m,t,x,k,he,ans;
int w[N];

struct node
{
    int l,r;
    int sum;
}tree[N*4];

void bulid(int u,int l,int r)
{
	he++;
    tree[u].l=l;
    tree[u].r=r;
    if(l==r) return;
    int mid=(l+r)/2;
    bulid(u*2,l,mid),bulid(u*2+1,mid+1,r);
}

void query(int u,int l,int r)
{
    if(tree[u].l>=l && tree[u].r<=r)
    {
    	ans+=tree[u].sum;
    	return;
	}
    int mid=(tree[u].l+tree[u].r)/2;
    if(l<=mid) query(u*2,l,r);
    if(r>mid) query(u*2+1,l,r);
}

int add(int u)
{
	if(tree[u].l==tree[u].r)
	{
		tree[u].sum=w[tree[u].r];
		return tree[u].sum;
	}
	tree[u].sum=add(u*2)+add(u*2+1);
	return tree[u].sum;
}

void modify(int u,int x,int v)
{
	tree[u].sum+=v;
    if(tree[u].l==tree[u].r) return;
    else
    {
        int mid=(tree[u].l+tree[u].r)/2;
        if(x<=mid) modify(u*2,x,v);
        else modify(u*2+1,x,v);
    }
}

int main()
{
    int n=0,last=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++) scanf("%d",&w[i]);
    bulid(1,1,n);
    add(1);
    while(m--)
    {
        scanf("%d%d%d",&t,&x,&k);
        if(t==1)
        {
            modify(1,x,k);
        }
        else
        {
        	ans=0;
            query(1,x,k);
            cout<<ans<<endl;
        }
    }
    return 0;
}
